/*  
 *  Nanjing JIYU Technology Co.,Ltd All rights reserved.
 *  Copyright (C) 2022 
 *  ==============================================================
 * 
 *  controlled.c 
 *    受控运行功能的实现
 *
 *  --------------------------------------------------------------
 *  
 */

#include "controlled.h"

#include "track.h"

#include "device.h"
#include "main.h"

/* 上位机控制下左转 */
static void ctrl_turn_left(void)
{
  track_turn_left(speed_low);
}


/* 上位机控制下右转 */
static void ctrl_turn_right(void)
{
  track_turn_right(speed_low);
}

/* 上位机控制下前进 */
static void ctrl_drive(void)
{
  /* 往前开一点，防止当前十字路口误判 */
  track_drive(speed_low_low);
	delay_ms(200);
  /* 循迹控制循环 */
  while (1)
  {
//    delay_ms(20);
    track_drive(speed_low_low);
				delay_ms(TIME);
    /* 遇到十标号，停车，跳出控制循环 */
    if (gray_is_cross())
    {
      track_stop();
      break;
    }
  }
}
static void ctrl_turn_t(void)
{
 while (1)
  {
    delay_ms(20);
    track_drive(speed_low);

    /* 遇到十标号，停车，跳出控制循环 */
    if (gray_is_t())
    {
      track_stop();
      break;
    }
  }
	motor_move(0, -speed_low);
	delay_ms(4000);
	track_stop();
	
}
static void ctrl_turn_around(void)
{
	 motor_move(0, -speed_high);

 delay_ms(2150);

 // while (gray_turn_not_ok0());  /* 没转到位，程序停在此处 */

  motor_move(0, 0);
}



static void ctrl_reverse(void)
{
//  track_reverse(speed_low);
	 motor_move(-speed_low,0);
  delay_ms(800);
	/* 循迹控制循环 */
  while (1)
  {
//    delay_ms(20);   //20
//    track_reverse(speed_low);
		motor_move(-speed_low,0);
    delay_ms(TIME);
    /* 遇到十标号，停车，跳出控制循环 */
    if ( gray_is_back())
    {
      track_stop();
      break;
    }
  }
}


void ctrl_run(unsigned char cmd)
{
  switch (cmd)
  {
    case 'w' :
      ctrl_drive(); //遇到十字路口才停
      break;
    case 's' :
      ctrl_reverse();
      break;
    case 'a' :
      ctrl_turn_left();
      break;
    case 'd' :
      ctrl_turn_right();
      break;
    case 'b' :
      ctrl_turn_left();
      break;
    case 'c' :
      ctrl_turn_right();
      break;
		case 't' :
			ctrl_turn_t();
		  break;
		case 'x' :
			ctrl_turn_around();
		  break;
    default   :
      break;
  }
}








